-- 2022-8-1

-- io.tmpfile返回一个操作临时文件的句柄，该句柄是以读/写模式打开的。
-- 当程序允许结束后，该临时文件会被自动移除(删除)

-- 函数flush将所有缓冲数据写如文件，与write一样，我们也可以当作io.flush()使用，以刷新当前输入流
-- 或者当作f:flush()使用，以刷新流f

-- 函数setvbuf用于设置流的缓冲模式，该函数的第一个参数是一个字符串："no"表示无缓存，"full"表示在缓冲区满时或者显示的刷新文件时才写入数据
-- "line" 表示输入一直被缓冲直到遇到换行符或从一些特定文件中读取到了数据
-- 对于后两个选项，函数setvbuf支持可选的第二个参数，用于指定缓冲区的大小

-- 在大多数系统在，标准错误流io.stderr是不被缓冲的，而标准输入流io.stdout按行缓冲
-- 因此，当向标准中在写入了不完整的行时，可能需要刷新这个输出流才能看到输出结果

-- 函数seek用来获取和设置文件的当前位置，常常使用f:seek(whence,offset)的形式来调用
-- 其中参数whence是一个指定如何使用偏移量的字符串
-- 当参数whence取值为 "set" 表示相对于文件尾部的偏移
-- 当参数whence取值为 "cur" 表示相对于当前位置的偏移
-- 当参数whence取值为 "end" 表示相对于文件尾部的偏移
-- 不管whence的取值是什么，该函数都会以字节为单位，返回当前新位置在流在相对于文件开头的偏移
-- whence的默认值是 "cur"，offset的默认值是0，因此，调用函数file:seek()会返回当前的位置且不改变当前位置；
-- 调用函数file:seek("set")会将位置重置到文件开头并返回0
-- 调用函数file:seek("end")会将当前位置重置到文件结尾并返回文件的大小
function fsize(file) -- 得到文件的大小
    local current = file:seek() -- 保存当前位置
    local size = file:seek("end") -- 获取文件大小
    file:seek("set",current) -- 恢复当前位置
    return size
end

-- 函数os.rename 用于文件的重命名
-- 函数os.remove用于移除文件
-- 需要注意的是这两个文件处理的是真实文件而非流，所以它们位于os库而非io库中
-- print(os.rename(".vscode\\code\\7\\test.lua","hhh.lua"))
-- 上述所有的函数在遇到错误时，均会返回nil外加一条错误信息和一个错误码